package com.category.douyijia;

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.redis.RedisPlugin;
import com.jfinal.render.ViewType;
import com.jfinal.template.Engine;
import com.category.douyijia.model.*;

/**
 * It is a global configuration java file,
 * and it is used to a hole java project.<p>
 * update time: 2021-7-6 18:55:40
 * @author JunfengLiu
 * @version v1.0
 * 
 */
/*
 * 全局配置java文件，作用于整个java项目。
 * 更新时间：2021-7-6 18:55:40
 * @author admin
 * @version v1.0
 *
 */
public class GlobalConfig extends JFinalConfig {
	static Prop prop;
	public static void loadConfig(){
		if (prop == null) {
			prop = PropKit.useFirstFound("douyijia-config-dev.txt");
		}
	}

	public static DruidPlugin createDruidPlugin() {
		loadConfig();
		
		return new DruidPlugin(prop.get("url"), prop.get("user"), prop.get("password"));
	}
	
	@Override
	public void configConstant(Constants me) {
		// TODO Auto-generated method stub
		loadConfig();
		// 配置开发模式，true 值为开发模式
		me.setDevMode(prop.getBoolean("devMode", false));
		// 配置 aop 代理使用 cglib，否则将使用 jfinal 默认的动态编译代理方案
//		me.setToCglibProxyFactory();
		//设置字符集为UTF-8
		me.setEncoding("UTF8");
		// 配置依赖注入
		me.setInjectDependency(true);
		// 配置对超类中的属性进行注入
		me.setInjectSuperClass(true);
		//默认使用jsp页面
		me.setViewType(ViewType.JSP);
		//设置JSON输出的日期时间格式
		me.setJsonDatePattern("yyyy-MM-dd HH:mm:ss");
		//设置可直接访问jsp页面
		me.setDenyAccessJsp(false);
		//最大上传文件容量为2GB
		me.setMaxPostSize(2*1024*1024*1024);
		//参数之间的分隔符连接设置
		me.setUrlParaSeparator("&");
	}

	@Override
	public void configRoute(Routes me) {
		// TODO Auto-generated method stub
		me.scan("com.category.douyijia");
//		/**
//		 * set manager's view path router
//		 */
//		//设置管理员访问路径
//		me.add(new Routes() {
//			
//			@Override
//			public void config() {
//				// TODO Auto-generated method stub
//				//this is scan view path
//				//扫描管理员访问时指定的view路径
//				this.setBaseViewPath("_view/_manager");
//				//this is scan java program file
//				//扫描指定jar包路径
//				this.scan("com.category.douyijia.manager");
//			}
//		});
//		//设置一般用户访问路径
//		/**
//		 * set customer's view path router
//		 */
//		me.add(new Routes() {
//			
//			@Override
//			public void config() {
//				// TODO Auto-generated method stub
//				//this is scan customer used view path
//				//设置普通用户访问时指定的view路径
//				this.setBaseViewPath("_view/_customer");
//				//this is scan customer java program file
//				//设置普通用户访问时指定的路径
//				this.scan("com.category.douyijia.customer");
//			}
//		});
//		/**
//		 * setting the final user view path router
//		 */
//		//设置用户通常情况下访问到的路径
//		me.add(new Routes(){
//
//			@Override
//			public void config() {
//				// TODO Auto-generated method stub
//				//this is the user usually visited path
//				//通常情况下用户的view访问路径
//				this.setBaseViewPath("_view");
//				//scan the visited package and skip package.
//				//扫描需要访问的路径和需要跳过的路径
//				this.scan("com.category.douyijia",
//					skipName->{
//					//usually,the user is not visited the manager
//					//普通用户一般不允许访问管理员权限功能
//					return skipName.startsWith("com.category.douyijia.manager"); 
//					}
//				);
//			}
//		});
	}

	@Override
	public void configEngine(Engine me) {
		// TODO Auto-generated method stub
		//it can be support Chinese character. 
				//支持中文表达式
				Engine.setChineseExpression(true);
	}

	@Override
	public void configPlugin(Plugins me) {
		// TODO Auto-generated method stub
		DruidPlugin druidPlugin = new DruidPlugin(prop.get("url"), prop.get("user"), prop.get("password"));
		me.add(druidPlugin);
		ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
		_MappingKit.mapping(arp);
		me.add(arp);
		//设置登录缓存
		RedisPlugin userRedis = new RedisPlugin("userLogin", "127.0.0.1", "wulixuezhe0317");
		me.add(userRedis);
	}

	@Override
	public void configInterceptor(Interceptors me) {
		// TODO Auto-generated method stub
		 
	}

	@Override
	public void configHandler(Handlers me) {
		// TODO Auto-generated method stub
		
	}

}
